package com.netnea.itnmdump;
import java.util.ArrayList;
import java.util.List;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ErrorNode;
import org.antlr.v4.runtime.tree.TerminalNode;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.netnea.itnmdump.parser.ItnmDumpListener;
import com.netnea.itnmdump.parser.ItnmDumpParser.Column_nameContext;
import com.netnea.itnmdump.parser.ItnmDumpParser.Database_nameContext;
import com.netnea.itnmdump.parser.ItnmDumpParser.ExprContext;
import com.netnea.itnmdump.parser.ItnmDumpParser.Insert_stmtContext;
import com.netnea.itnmdump.parser.ItnmDumpParser.Key_nameContext;
import com.netnea.itnmdump.parser.ItnmDumpParser.Literal_valueContext;
import com.netnea.itnmdump.parser.ItnmDumpParser.Oql_arrayContext;
import com.netnea.itnmdump.parser.ItnmDumpParser.Oql_hashContext;
import com.netnea.itnmdump.parser.ItnmDumpParser.Oql_kvContext;
import com.netnea.itnmdump.parser.ItnmDumpParser.ParseContext;
import com.netnea.itnmdump.parser.ItnmDumpParser.Sql_stmt_listContext;
import com.netnea.itnmdump.parser.ItnmDumpParser.Table_nameContext;
public class ItnmDumpJSONWriter implements ItnmDumpListener {
List<String> columns;
Gson gson = new Gson();
StringBuffer buf = new StringBuffer();
boolean c = false;
@Override
public void enterEveryRule(ParserRuleContext arg0) {
}
@Override
public void exitEveryRule(ParserRuleContext arg0) {
}
@Override
public void visitErrorNode(ErrorNode arg0) {
}
@Override
public void visitTerminal(TerminalNode arg0) {
}
@Override
public void enterParse(ParseContext ctx) {
}
@Override
public void exitParse(ParseContext ctx) {
String json = buf.toString().replaceAll(",\\]", "]").replaceAll(",\\}", "}");
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser jp = new JsonParser();
JsonElement je = jp.parse(json);
String prettyJsonString = gson.toJson(je);
System.out.println(prettyJsonString);
}
@Override
public void enterSql_stmt_list(Sql_stmt_listContext ctx) {
buf.append("[");
}
@Override
public void exitSql_stmt_list(Sql_stmt_listContext ctx) {
buf.append("]");
}
@Override
public void enterDatabase_name(Database_nameContext ctx) {
}
@Override
public void exitDatabase_name(Database_nameContext ctx) {
}
@Override
public void enterTable_name(Table_nameContext ctx) {
}
@Override
public void exitTable_name(Table_nameContext ctx) {
}
@Override
public void enterColumn_name(Column_nameContext ctx) {
columns.add(ctx.getText());
}
@Override
public void exitColumn_name(Column_nameContext ctx) {
}
@Override
public void enterKey_name(Key_nameContext ctx) {
buf.append(gson.toJson(ctx.getText()) + ":");
}
@Override
public void exitKey_name(Key_nameContext ctx) {
}
@Override
public void enterLiteral_value(Literal_valueContext ctx) {
}
@Override
public void exitLiteral_value(Literal_valueContext ctx) {
String text = ctx.getText().replaceAll("^'", "\"").replaceAll("'$", "\"");
buf.append(text);
}
@Override
public void enterExpr(ExprContext ctx) {
}
@Override
public void exitExpr(ExprContext ctx) {
buf.append(",");
}
@Override
public void enterOql_kv(Oql_kvContext ctx) {
}
@Override
public void exitOql_kv(Oql_kvContext ctx) {
}
@Override
public void enterOql_hash(Oql_hashContext ctx) {
buf.append("{");
}
@Override
public void exitOql_hash(Oql_hashContext ctx) {
buf.append("}");
}
@Override
public void enterOql_array(Oql_arrayContext ctx) {
buf.append("[");
}
@Override
public void exitOql_array(Oql_arrayContext ctx) {
buf.append("]");
}
@Override
public void enterInsert_stmt(Insert_stmtContext ctx) {
columns = new ArrayList<String>();
buf.append("{ \"values\": [");
}
@Override
public void exitInsert_stmt(Insert_stmtContext ctx) {
buf.append("],");
buf.append("\"columns\":" + gson.toJson(columns));
buf.append("},");
}
}